/**
 ******************************************************************************
 * @file app_pokemon.h
 * @author GX (2524913364@qq.com)
 * @brief   宝可梦APP
 *          (1)画面中的主要内容：会动的宝可梦，对话框，宝可梦的抱食度，喂食按键。
 *          (2)宝可梦有不同的状态，每个状态都会有不同的台词与玩家互动。
 *          (3)点击宝可梦可让宝可梦变成开心状态，并且会跳跃三下。
 *          (4)按住相对于宝可梦左边(右边)的区域宝可梦会朝着该位置移动，
 *             移动速度有三档，根据所在位置与目标位置的距离自动切换。
 *          (5)宝可梦移动和跳跃都会降低抱食度，当抱食度小于 20 时会变红色，当为 0
 *             时宝可梦不能再移动。必须喂食。
 *          (6)进入游戏和退出游戏都有动画，而且宝可梦也会打招呼。
 * @version 1.0.0 
 * @date 2022-07-12
 * 
 * @copyright Copyright (c) 2022
 * 
 ******************************************************************************
 *----------------------------------------------------------------------------*
 *  Remark         : Description                                              *
 *----------------------------------------------------------------------------*
 *  Change History :                                                          *
 *  <Date>     | <Version> | <Author>       | <Description>                   *
 *----------------------------------------------------------------------------*
 *  2022-07-12 | 1.0.0     | GX             | Create file                     *
 *----------------------------------------------------------------------------*
 *                                                                            *
 ******************************************************************************
 */


/*----------------------------- start of file -------------------------------*/

#ifndef _APP_POKEMON_H
#define _APP_POKEMON_H


/*-------------------------------- include ----------------------------------*/
#include <stdio.h>
#include <stdbool.h>
#include <time.h>
#include "fonts.h"


/*---------------------- Define parameters and types ------------------------*/

/**
 * @brief 游戏字体，如果字库文件不是使用项目原装的"fonts.h"，
          用户可根据自己使用的字库里的变量名修改宏定义
 */
#define POKEMON_FONT            Font16x24     /* 字体大小 */
#define POKEMON_TEXT_COLOR      0x0000000     /* 字体颜色为黑色 */
#define POKEMON_UNUES_BACKCOLOR false         /* 不使用字体背景 */
#define POKEMON_BACK_COLOR      0x00          /* 不使用背景，颜色可以随便填 */
#define POKEMON_TEXT_LINE       18            /* 文字显示的起始行数 */
#define POKEMON_TEXT_BLOCK      3             /* 文字显示的起始格数 */

/* 宝可梦状态------------------------------- */
typedef enum 
{
  POKEMON_NOTHING,          /* 0 */
  POKEMON_MEET,             /* 1 见面 */
  POKEMON_GOODBYE,          /* 2 告别 */
  POKEMON_HAPPY,            /* 3 */        
  POKEMON_HUNGER,           /* 4 */
  POKEMON_EATTING,          /* 5 */
}POKEMON_STATE;

/* 宝可梦的属性----------------------------- */
typedef struct myPokemon
{
  bool saying;          /* 是否在说话（状态正在响应） */
  bool state_responed;  /* 宝可梦的状态是否响应完毕 */
  int pos_x;            /* 左上角的x坐标 */
  int pos_y;            /* 左上角的y坐标 */
  int width;            /* 宽度 */
  int heigh;            /* 高度 */
  int pic_show;         /* 当前贴纸 */
  int pic_num;          /* 贴纸总數 */
  int satiety;          /* 抱食度 0～100 */
  int de_satietyCount;  /* 计数到一定值就会减少抱食度 */
  POKEMON_STATE state;  /* 状态 */
  POKEMON_STATE responing;  /* 正在响应的状态 */
  long time_staCheck;   /* 记录最近一次检查状态的时间，为了定时检查和响应状态 */
  long time_talk;       /* 开始说话(响应状态)的时间 */  
  long time_cur;        /* 当前时间 */
}myPokemon;

#define POKEMON_ANIMA_PATH      "./data/pokemon/anima/"       /* 开场动画路径 */
#define MYPOKEMON_PATH          "./data/pokemon/mypokemon/"  /* 宝可梦贴纸路径 */
#define POKEMON_WALLPAPER_PATH  "./data/pokemon/wallpaper/poke_wallpaper.bmp"   /* 背景图的路径 */

#define POKEMON_ANIMA_NUM       16                            /*开场动画的图片數*/

#define POKEMON_OPENNING        "Eevee! It's up to you!"      /* 进场台词 */
#define POKEMON_ENDING          "Eevee, Come back."           /* 退场台词 */

#define POKEMON_SAY_MEET        "Oh yeah! You're back! Let's play together!"
#define POKEMON_SAY_HAPPY       "I'm so happy you know, xixi."
#define POKEMON_SAY_HUNGER      "I'm so hungry that I want to eat."
#define POKEMON_SAY_GOODBEY     "Do you have to go? Allright, I will mess you."
#define POKEMON_SAY_EATTING     "Mum mum mum... delicious mum mum..."

#define POKEMON_STATE_INTERVAL   4           /* 宝可们状态检查间隔时间 */
#define POKEMON_STATE_Duration   2           /* 宝可梦状态响应持续时间 */

/* 宝可梦的移动范围，此范围是指以宝可们图片的左上角的点的范围（一个点的位置表示宝可们位置） */
#define POKEMON_MOVE_LEFTLINE   0           /* 左界 */
#define POKEMON_MOVE_RIGHTLINE  700         /* 右界 */
#define POKEMON_MOVE_UPLINE     305         /* 上界 */
#define POKEMON_MOVE_DOWNLINE   390         /* 下界 */

/* 图标，按键之类的属性------------------- */
/* 键值 */
typedef enum
{
  POKEMON_KEY_NONE,                         /* 无操作 */
  POKEMON_KEY_FOOD,                         /* 喂食键 */
  MYPOKEMON_KEY,                            /* 点击宝可梦 */
  POKEMON_BACK                              /* 返回键 */
}POKEMON_KEY;

/* 槽 */
#define POKEMON_SLOT_COLOR      0x00EBEBEB  /* 空槽颜色 */
#define POKEMON_SLOT_X_START    145         /* 槽的起始x坐标 */
#define POKEMON_SLOT_Y_START    25          /* 槽的起始y坐标 */
#define POKEMON_SLOT_LONG       100         /* 槽的长度 */
#define POKEMON_SLOT_HEIGHT     20          /* 槽的高度 */
#define POKEMON_HUNGRY          20          /* 抱食度的警戒值 */

/* 食物按键的坐标范围 */  
#define POKEMON_FOOD_X_START    0 
#define POKEMON_FOOD_X_END      80
#define POKEMON_FOOD_Y_START    70
#define POKEMON_FOOD_Y_END      150

/* 返回按键的坐标范围 */  
#define POKEMON_BACK_X_START    710 
#define POKEMON_BACK_X_END      800
#define POKEMON_BACK_Y_START    0
#define POKEMON_BACK_Y_END      90


/*-------------------------- Function declaration ---------------------------*/

bool app_Pokemon(void);


#endif  /* _APP_POKEMON_H */
 
/*------------------------------ end of file --------------------------------*/

